ncurses: add the terminal dependency root#8
Merged
Conversation
2a98db2 to
7b5a83d
Compare
Member
Author
|
Rebased onto current tap
No ABI 18 artifact rebuild or runtime claim was added by this rebase. The existing #842/#867 and bottle-publication gates remain in force. |
This was referenced Jul 11, 2026
a6e58d2 to
23f0533
Compare
23f0533 to
93567f2
Compare
Use Homebrew tap resolution so the installed keg copy of the formula can reload shared Kandelo support instead of looking for a nonexistent relative path.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Purpose
Add ncurses as Kandelo's terminal-library dependency root. The formula builds the wide-character static C and C++ interfaces, debug variants, conventional compatibility names, pkg-config metadata, guest utilities, manpages, compiled fallbacks, and the full terminfo database.
This unblocks dependency-first migrations for shells, editors, terminal tools, and other CLI packages.
Platform prerequisites
Bottle publication remains gated on the open Kandelo platform chain:
The pthread fork-continuation fix and ABI 18 transition from #867 are merged. The formula deliberately does not inject a package-specific stack flag. Static ncurses cannot own a final executable's stack, and doing so would hide the same platform defect from other software.
Formula contract
tic/infocmponly for architecture-independent data generation./home/linuxbrew/.linuxbrew/opt/ncurses, never the build host's keg.tic,tput, andinfocmpunder Kandelo and verifies a generated custom terminal entry.Generator portability fix
Upstream
MKfallback.shuses GNU sed's word-boundary syntax to rewrite generatedshortarrays toNCURSES_INT2. Darwin sed silently leaves that expression unchanged. With target extended colors enabled, the resulting fallback table stored 16-bit numbers while ncurses read theTERMTYPE2table as 32-bit numbers, sosetupterm()succeeded but numeric capabilities such ascolorswere misindexed.The formula rewrites that generator expression to a portable, declaration-specific substitution and rejects a generated fallback table with the wrong target width.
Reproducible debug archives
The previously reported local bottle (
a6110827...) is rejected and must not be published. Its_garchives retained builder paths and nondeterministic member metadata.The formula now:
ardeterministiccrDmode instead of upstream's first accepted-curvUcandidate;brew test, while allowing only the intentional guest opt prefix.Validation
Local evidence using
scripts/dev-shell.shand the ABI 18 integration worktree:ncurses-20260711-23670-x5gtpvandncurses-20260711-57816-nxor9o).brew testpassed for both builds, including isolated compiled fallback, disk database, targetticoutput, C, C++, pkg-config, termcap, and header compatibility paths.libncursesw_g.aSHA-256:d3d1c0e57d265ff111dbafc414861a77d98b1a26275c265246b9a819a9fbdcd9.ncurses-20260711-59925-j3iowyandncurses-20260711-94733-8c3cqa) produced byte-identical manifests for all 12 real normal and debug archives. Representative normallibncursesw.aSHA-256:2d6d3b92b8b9aa12908d19fc83552f89b59108ae12bb0b7c38e628ef81a73d28./usr/src/ncurses-6.5as its compilation directory./Users/,/private/tmp/,/private/var/,/nix/store/, and the Kandelo integration worktree.fallback.ouses the expected 32-bit numeric-capability layout.brew style: no offenses.git diff --check: passed.A corrected bottle will be generated from the final merged platform and publisher state.
brew auditis not claimed: the cross-target's intentional top-level compatibility headers trigger Homebrew's macOS system-header shadow rule. Publication remains gated on the platform PRs above.Keg reload and dependency provenance
Current head
56dc558resolves shared formula support throughTap.fetch, matching the tap-wide installed-formula contract. This fixes the prior exact-head keg reload failure caused byrequire_relativelooking beside Homebrew's keg-local.brew/ncurses.rbcopy. Throughscripts/dev-shell.sh, Homebrew portable Ruby syntax, literal formula loading throughbrew ruby,brew style Formula/ncurses.rb, andgit diff --checkpass.The archive reproducibility evidence above used a source-built libcxx dependency: its retained receipt says
built_as_bottle: false,poured_from_bottle: false, and identifies an older tap head. That evidence remains valid for ncurses' own 12 deterministic archives, but it is not bottle-to-bottle dependency evidence. Publication must proceed dependency-first:poured_from_bottle: truewith the Kandelo bottle tag and current formula provenance.brew testbefore publishing ncurses metadata.The ABI 18 ledger repair and #867 are already on main. Remaining publication gates are #842, #873, #881 plus tap #22, #882, #887, #890, and #885 rebased to retain #890. #892 is not an ncurses prerequisite. The source formula can land independently; no bottle block or user-facing install claim is added by this PR.